<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
        //回调函数
        //   function changeNum(age) {
        //     if (age === 2) {
        //       return 22;
        //     } else {
        //       return changeNum(age - 2) - 4;
        //     }
        //   }
        //   console.log(changeNum(8));

        //   //changeNum(6)-4
        //   //changeNum(4)-4
        //   //changeNum(2)-4
        //   changeNum(2) =22

        //题2
        //   function fun(n, o) {
        //     //(0,o) //(1,0)//(2,1)//(3,1)
        //     console.log(o); //undefined //0 //1//1

        //     return {
        //       fun: function (m) {
        //         return fun(m, n); //(m,0)//(1,1)//(2,2)
        //       },
        //     };
        //   }

        //   var c = fun(0).fun(1);

        //   c.fun(2);

        //   c.fun(3);

        //题14
        var name = '1';

        var object = {
          name: '2',

          getNameFunc: function () {
            this.name = '3';

            return function () {
              return this.name;
            };
          },
        };

        console.log(object.getNameFunc()());
        //解析
        //object.getNameFunc()返回function () {
        //     return this.name;
        //   };
        //object.getNameFunc()（） 没有调用者，this指向window

        //题:15
        //   var a = 6;

        //   function aaa() {
        //     a = 8;

        //     return function () {
        //       ++a;

        //       console.log(a++, this.a);
        //     };
        //   }

        //   var fun = aaa();

        //   fun();

        //   fun();

        //解析
        // fun = aaa() 返回 function () {
        //           ++a;

        // console.log(a++, this.a);
        // };
        //fun() 调用返回函数 这里的this也被修改，指向全局，全局的a也被修改

        //题16
        //   function Person() {}

        //   Person.prototype.n = 1;

        //   var p1 = new Person();
        //   //实例对象p1指向Person.prototype

        //   Person.prototype = {
        //     n: 2,

        //     m: 3,
        //   };

        //   var p2 = new Person();
        //   //这里的Person被修改

        //   console.log(p1.n, p1.m, p2.n, p2.m);

        //题17
      //   function A() {}

      //   function B(a) {
      //     this.a = a;
      //   }

      //   function C(a) {
      //     if (a) {
      //       this.a = a;
      //     }
      //   }

      //   A.prototype.a = 1;

      //   B.prototype.a = 1;

      //   C.prototype.a = 1;

      //   console.log(new A().a);
      //   //构造函数A原型对象的A

      //   console.log(new B().a);
      //   //因为构造函数B中有a属性，只不过未传实参，所以为undefined

      //   console.log(new C(2).a);

        //ti19
        function Fn() {      var num = 500;      this.x = 100;    }  
          Fn.prototype.getX = function () {      console.log(this.x);    }   
           Fn.aaa = 1000;    
           var f = new Fn();  
             console.log(f.num) 
                console.log(f.aaa)   
                 var res = Fn();console.log(res)
    </script>
  </body>
</html>
